package dao;

import entidad.Permiso;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

public class PermisoDAO {
    
    private EntityManagerFactory emf = JPAUtil.getEntityManagerFactory();
    
    public void crear(Permiso object) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public boolean eliminar(Permiso object) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        boolean ret = false;
        try {
            em.remove(object);
            em.getTransaction().commit();
            ret = true;
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
            return ret;
        }
    }

    public Permiso leer(Permiso object) {
        EntityManager em = emf.createEntityManager();
        Permiso permiso = null;
        Query q = em.createQuery("SELECT p FROM Permiso p"
                + "WHERE p.id = :id")
                .setParameter("id", object.getId());
        try {
            permiso = (Permiso) q.getSingleResult();
        } catch (NoResultException e) {
            permiso = null;
        } catch (NonUniqueResultException e) {
            permiso = (Permiso) q.getResultList().get(0);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            em.close();
            return permiso;
        }
    }

    public boolean actualizar(Permiso object, Permiso nuevoObjeto) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        boolean ret = false;
        try {
            object = leer(object);
            
            object.setAgregarProductos(nuevoObjeto.puedeAgregarProductos());
            object.setAgregarProveedores(nuevoObjeto.puedeAgregarProveedores());
            object.setAgregarUsuarios(nuevoObjeto.puedeAgregarUsuarios());
            
            object.setConsultarProductos(nuevoObjeto.puedeConsultarProductos());
            object.setConsultarProveedores(nuevoObjeto.puedeConsultarProveedores());
            object.setConsultarUsuarios(nuevoObjeto.puedeConsultarUsuarios());
            
            object.setEditarProductos(nuevoObjeto.puedeEditarProductos());
            object.setEditarProveedores(nuevoObjeto.puedeEditarProveedores());
            object.setEditarUsuarios(nuevoObjeto.puedeEditarUsuarios());
            
            object.setEliminarProductos(nuevoObjeto.puedeEliminarProductos());
            object.setEliminarProveedores(nuevoObjeto.puedeEliminarProveedores());
            object.setEliminarUsuarios(nuevoObjeto.puedeEliminarUsuarios());
            
            object.setGenerarReportes(nuevoObjeto.puedeGenerarReportes());
            object.setRealizarTransferencias(nuevoObjeto.puedeRealizarTransferencias());
            
            em.merge(object);
            em.getTransaction().commit();
            ret = true;
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
            return ret;
        }
    }
    
}
